#pragma once
#include<iostream>
#include<string>
using namespace std;

string opers = "+-*/%";
enum{
    DivZero = 1,
    ModZero,
    Unknown
};

class Task
{
public:
    Task(int& x, int& y,char op)
        :data1_(x),
        data2_(y),
        oper_(op),
        result_(0),
        exitcode_(0)
    {}  

    ~Task()
    {

    }

    void operator()()
    {
        this->run();
    }
    string GetTask()
    {
        string r = to_string(data1_);
        r += oper_;
        r += to_string(data2_);
        r += "=?";
        return r;
    }

    string GetResult()
    {
        string r = to_string(data1_);
        r += oper_;
        r += to_string(data2_);
        r += "=";
        r += to_string(result_);
        r += "[";
        r += to_string(exitcode_);
        r += "]";

        return r;
    }
    int run()
    {
        switch(oper_)
        {
            case '+':
                result_ = data1_ + data2_;
                break;
            case '-':
                result_ = data1_ - data2_;
                break;
            case '*':
                result_ = data1_ - data2_;
                break;
            case '/':
            {
                if(data2_ == 0) 
                    exitcode_ = DivZero;
                else 
                    result_ = data1_ / data2_;
            }
            break;
            case '%':
            {
                if(data2_ == 0) 
                    exitcode_ = ModZero;
                else 
                    result_ = data1_ % data2_;
            }
            break;
            default:
                exitcode_ = Unknown;
        }
    }

private:
    int data1_;
    int data2_;
    char oper_; //运算符

    int result_;
    int exitcode_; //相当于退出码
};